/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entities;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
 *
 * @author root
 */
@Entity
@Table(name = "logs")
@NamedQueries({
    @NamedQuery(name = "Logs.findAll", query = "SELECT l FROM Logs l"),
    @NamedQuery(name = "Logs.findByIdLog", query = "SELECT l FROM Logs l WHERE l.idLog = :idLog"),
    @NamedQuery(name = "Logs.findByFecha", query = "SELECT l FROM Logs l WHERE l.fecha = :fecha"),
    @NamedQuery(name = "Logs.findByObservaciones", query = "SELECT l FROM Logs l WHERE l.observaciones = :observaciones"),
/*    @NamedQuery(name = "Logs.findByTodo", query = "SELECT l FROM Logs l "
        + "WHERE (((l.usuario.nombre LIKE CONCAT('%', :usuario,'%')) OR "
        + "(l.observaciones LIKE CONCAT('%', :observaciones,'%')) OR "
        + "(l.fecha BETWEEN :fechaInicial AND :fechaFinal)) OR "
        + "((l.usuario.nombre LIKE CONCAT('%', :usuario,'%')) AND "
        + "(l.observaciones LIKE CONCAT('%', :observaciones,'%')) AND "
        + "(l.fecha BETWEEN :fechaInicial AND :fechaFinal)))")})*/
    @NamedQuery(name = "Logs.findByTodo", query = "SELECT l FROM Logs l "
        + "WHERE (((l.usuario.nombre LIKE CONCAT('%', :usuario,'%')) OR (:usuario = '')) AND "
        + "((l.observaciones LIKE CONCAT('%', :observaciones,'%')) OR (:observaciones = '')) AND "
        + "((l.fecha BETWEEN :fechaInicial AND :fechaFinal) OR ((:fechaInicial IS null) AND (:fechaFinal IS null))))")})
public class Logs implements Serializable {
    @Basic(optional = false)
    @Column(name = "fecha")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecha = new Date();
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idLog")
    private Integer idLog;
    @Basic(optional = false)
    @Column(name = "observaciones")
    private String observaciones;
    @JoinColumn(name = "usuario", referencedColumnName = "idUsuario")
    @ManyToOne(optional = false)
    private Usuarios usuario;

    public Logs() {
    }

    public Logs(Integer idLog) {
        this.idLog = idLog;
    }

    public Logs(Integer idLog, String observaciones) {
        this.idLog = idLog;
        this.observaciones = observaciones;
    }

    public Integer getIdLog() {
        return idLog;
    }

    public void setIdLog(Integer idLog) {
        Integer oldIdLog = this.idLog;
        this.idLog = idLog;
        changeSupport.firePropertyChange("idLog", oldIdLog, idLog);
    }

    public String getObservaciones() {
        return observaciones;
    }
    
    public void setearObservaciones(String abm, String tipoDato, int IDDato, String nombreView){
        String stringTemp = abm+" de "+tipoDato+" ID: "+IDDato+" - "+nombreView;
        this.observaciones = stringTemp;
    }

    public void setObservaciones(String observaciones) {
        String oldObservaciones = this.observaciones;
        this.observaciones = observaciones;
        changeSupport.firePropertyChange("observaciones", oldObservaciones, observaciones);
    }

    public Usuarios getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuarios usuario) {
        Usuarios oldUsuario = this.usuario;
        this.usuario = usuario;
        changeSupport.firePropertyChange("usuario", oldUsuario, usuario);
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idLog != null ? idLog.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Logs)) {
            return false;
        }
        Logs other = (Logs) object;
        if ((this.idLog == null && other.idLog != null) || (this.idLog != null && !this.idLog.equals(other.idLog))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entities.Logs[ idLog=" + idLog + " ]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        Date oldFecha = this.fecha;
        this.fecha = fecha;
        changeSupport.firePropertyChange("fecha", oldFecha, fecha);
    }
    
}
